
// //1.在Dart里面，所有要被执行的代码都要放在入口代码里面也就是main方法
// main(){
  
// print("你好 dart");

// }

//表示main方法没有返回值
void main(){

print("你好 dart");

}

//1.Dart的变量 常量和命名规则
/**
 * Dart入口方法的两种定义方式
 * 
 * main(){
 * 
 * print("你好dart");
 * 
 * }
 * 
 * 
 * void main(){
 * 
 * print("你好dart");
 * 
 * }
 * 
 * Dart 变量
 * dart是一个强大的脚本类语言，可以不预先定义变量类型，自动会类型推倒
 * 
 * dart中定义变量可以通过var关键字可以通过类型来申明变量
 * 
 * 如：
 * var str ='this is var';
 * 
 * String str ="this is var"; 也可以自定义类型
 * 
 * int str=123;
 * 
 * 注意：var后就不要写类型，写类型就不要写var 两者都写 var a int =5; 报错
 * 
 * dart里面有类型校验
 * 
 * var str='当设置为字符串类型的时候默认类型就是字符串'
 * 
 * str=1234  给其他类型的值会报错
 * 
 * Dart的命名规则：
 * 
 * 1.变量名称必须有数字,字母，下划线和美元符（$）组成。
 * 2.注意：标识符开头不能是数字。比如var 2str='xxx';//报错
 * 3.标识符不能是保留字和关键字。比如var if='xxx';//报错
 * 4.变量的名字是区分大小写的如：age和Age是不同的变量。在实际的运用中，也建议，不要用一个
 * 如var age=10;  var Age=20;//都可以打印
 * 5.标识符（变量名称）一定要见名思意：变量名称你建议用名词，方法名称建议用动词。
 * var age=10 一看就是年龄
 * 
 *   Dart 常量：final 和const修饰符
 * 
 * const值不变 一开始就得赋值
 * final 可以开始不赋值 只能赋值一次;而final不仅有const的编译时常量的特性，最重要的它是运行时的常量，
 * 并且final是惰性初始化，在运行是第一次使用前才初始化永远不改量的量，请使用final或const修饰它，而不是使用var或其他变量类型。
     const常量：
 比如：const PI="1234";//常量只能赋值一次
        PI=123；//常量不可以被修改
        final常量
final PI1=3.1415;
PI1=3.1415;//常量不可以被修改

const和final的区别：
final 可以开始不赋值 只能赋值一次;而final不仅有const的编译时常量的特性，最重要的它是运行时的常量，
并且final是惰性初始化，在运行是第一次使用前才初始化永远不改量的量，请使用final或const修饰它，而不是使用var或其他变量类型。


2.Dart的数据类型详解 int double String bool List Map

Dart中支持以下数据类型：

常用数据类型：
     
      Numbers(数值)：
      int
      double
      Strings(字符串)
      String
      Booleans(布尔)
      bool
      List（数据）
      在Dart中，数组是列表对象，所有大多数人只是称它们为列表
      Maps(字典)
      通常来说，Map是一个键值对相关的对象。键和值可以是任何类型的对象。每个键只出

      项目中用不到的数据类型：
      Runes
      Rune是UTF-32编码的字符串。它可以通过文字转换成符号表情或者代表特定的文字。

      
3.Dart运算符 条件判断 Dart类型转换

1.Dart运算符:

算数运算符
+   -   *   /   ~/(取整)   %（取余）

关系运算符
==    ！=    >    <    >=    <= 

逻辑运算符
！    &&    ||  

赋值运算符
基础赋值运算符   =   ??=
复合赋值运算符   +=   -=   *=   /=   %=    ~/=



条件表达式
1.if else   switch case
2.三目运算符
3.??运算符

2.类型转换
1.Number与String类型之间的转换
2.其他类型转换成Booleans类型

3. 循环语句 for while do...while  break  continue

Dart 集合类型List Set Map 详解 以及循环语句forEach map where any every

List里面常用的属性和方法:
常用属性:
length       长度
reversed     翻转
isEmpty      是否为空
isNotEmpty   是否不为空

常用方法:
add      增加
addA11   拼接数组
indexof  查找 传入具体值
remove   删除 传入具体值
removeAt 删除 传入索引值 

fillRange   修改
insert(index,value);   指定位置插入
insertAll(index,list)  指定位置插入List
tolist()  其它类型转换成List
join()   List转换成字符串
split()  字符串转化成List
forEach
map
where
any
every


Set

用它最主要的功能就是去除数组重复内容

Set是没有顺序且不能重复的集合，所以不能通过索引去获取值


映射(Maps)是无序的键值对:
常用属性:
keys        获取所有的key值
values      获取所有的value值
isEmpty     是否为空
isNotEmpty  是否不为空
常用方法:
remove(key) 删除指定key的数据
addA11({...})合并映射 给映射内增加属性
containsValue 查看映射的值 返回true/false
forEach
map
where
any
every

Dart中的函数 函数的定义 可选参数 默认参数 命名参数 箭头参数
匿名参数 闭包等

内置方法/函数

print();

自定义方法：
自定义方法的基本格式：
返回类型 方法名称 （参数1，参数2......）{
方法体
return 返回值;

}


 * 1.常驻内存
 * 2.不污染环境
 * 
 * 产生了闭包，闭包可以解决这个问题......
 * 
 * 闭包：函数嵌套函数，内部函数会调用外部函数的变量或参数，变量或参数不会被系统回收
 * 
 * 闭包的写法：函数嵌套函数，并return里面的函数，这样就形成了闭包
 * 
 * 
 * 
 * Dart 中的类 对象
 * 
 * 面向对象编程（OOP）的三大基本特征是：封装，继承，多态
 * 封装：封装是对象和类概念的主要特性。封装，把客观事物封装成抽象的类，并且把自己的部分属性和方法提供给其他
 * 继承：面向对象编程（OOP）语言的一个主要功能就是"继承"。继承是指这样一种能力：它可以使用现有类的功能，并在
 * 多态：允许将子类类型的指针赋值给父类的指针，同一个函数调用会有不同的执行效果。
 * 
 * Dart所有的东西都是对象，所有的对象都继承自Object类
 * 
 * Dart是一门使用类和单继承的面向对象语言，所有的对象都是类的实例，并且所有的类都是Object的子类
 * 
 * 一个类通常有属性和方法组成。
 * 
 * 
 * 
 * Dart中的类 静态成员 操作符 类的继承
 * 
 * Dart中的抽象类 多态 和接口
 * 
 * Dart中一个类实现多个接口 以及Dart中的Mixins
 * 
 * 
 * Dart中泛型 泛型方法 泛型类  泛型接口
 * 
 * 
 */